package com.example.demo.common;


import lombok.Data;

import java.io.Serializable;

/**
 *  统一返回数据，也就是controller底下的方法返回都是 AjaxResult 类型
 *
 * common底下都是放一些共同的，通用的
 *
 * AjaxResult 名字可以修改，快速地返回一个通用的对象
 * 因为是一个通用的对象，所以放在 common 下
 * 最终版的 json 统一返回对象,要实现 Serializable 接口
 * Serializable 序列化接口
 */
@Data
public class AjaxResult implements Serializable {
    // 传递给前端的三个属性
    // 状态码
    private int code;
    // 状态码描述信息
    private String msg;
    // 传递的数据，可能是任意信息，所以是 Object
    private Object data;

    /**
     * 第一个用的最多
     * 返回成功信息
     * @param data
     * @return
     */
    // 方便调用设成 static
    public static AjaxResult success(Object data) {
        AjaxResult ajaxResult = new AjaxResult();
        // 前端只认识成功 200，非200就是失败
        ajaxResult.setCode(200);
        // 看到200就表示成功了，所以不需要传递描述信息，也就不建议自定义状态码描述信息了
        ajaxResult.setMsg("");
        ajaxResult.setData(data);
        return ajaxResult;
    }

    // 非要自定义也可以，提供方法
    public static AjaxResult success(Object data,String msg) {
        AjaxResult ajaxResult = new AjaxResult();
        // 前端只认识成功 200，非200就是失败
        ajaxResult.setCode(200);
        // 看到200就表示成功了，所以不需要传递描述信息，也就不建议自定义状态码描述信息了，传递了也可以
        ajaxResult.setMsg(msg);
        ajaxResult.setData(data);
        return ajaxResult;
    }


    /**
     * 第一个用的最多
     * 最少传递两个参数，状态码 和 状态码描述信息
     * 返回失败信息
     * @param code
     * @param msg
     * @return
     */
    public static AjaxResult fail(Integer code,String msg) {
        AjaxResult ajaxResult = new AjaxResult();
        // 前端只认识成功 200，非200就是失败,所以传递一个非200的就可以了
        ajaxResult.setCode(code);
        // 看到200就表示成功了，所以不需要传递描述信息，也就不建议自定义状态码描述信息了
        ajaxResult.setMsg(msg);
        // 此时是错误信息，大概率这个数据data是没有意义的,是空的
        ajaxResult.setData("");
        return ajaxResult;
    }

    // 传递data也可以
    public static AjaxResult fail(Integer code,String msg,Object data) {
        AjaxResult ajaxResult = new AjaxResult();
        ajaxResult.setCode(code);
        ajaxResult.setMsg(msg);
        // 此时是错误信息，大概率这个数据data是没有意义的，设置了也可以，开放一个data
        ajaxResult.setData(data);
        return ajaxResult;
    }

}
